#include "pch.hpp"
#include "ProgressBar.hpp"




ProgressBar::ProgressBar(Widget* parent, Widgets::Type finalType /*= Widgets::ProgressBar*/)
	: Frame(parent, finalType)
{
	if(finalType == type())
		updateStyle();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

ProgressBar::~ProgressBar()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




int ProgressBar::min() const
{
	return m_min;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int ProgressBar::max() const
{
	return m_max;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int ProgressBar::current() const
{
	return m_current;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ProgressBar::setMin(int min)
{
	m_min = min;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ProgressBar::setMax(int max)
{
	m_max = max;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ProgressBar::setCurrent(int current)
{
	m_current = std::min(m_max, std::max(m_min, current));
}
///////////////////////////////////////////////////////////////////////////////////////////////////

math::color ProgressBar::barColor() const
{
	return m_barColor;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ProgressBar::setBarColor(const math::color& color)
{
	m_barColor = color;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




Widgets::Type ProgressBar::type() const
{
	return Widgets::ProgressBar;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ProgressBar::renderAdditional(Quads& quads, const NestedState& state)
{
	Frame::renderAdditional(quads, state);

	math::rect<int> rect = clientRect();
	rect.size.y *= (m_current - m_min) / (m_max - m_min);

	Quad quad = backgroundGlyph().quad();
	quad.resize(rect.size);
	quad.move(rect.pos);
	quad.setColor(m_barColor);
	quads.push_back(quad);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

uint32 ProgressBar::numAdditionalQuads() const
{
	uint32 numQuads = Frame::numAdditionalQuads();
	return numQuads + 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
